package servlets;

import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import capaLogica.Mensaje;
import capaLogica.MensajeBO;
import capaLogica.PerfilBO;
import capaLogica.Usuario;
import capaLogica.UsuarioBO;

/**
 * Servlet implementation class MensajeCO
 */
public class MensajeCO extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public MensajeCO() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(request,response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String accion = request.getParameter("accion");
		try {
			procesarAccion(accion, request, response);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void procesarAccion(String accion, HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException, ParseException {
		if (accion.equals("listarMensajesRecibidos")) {
			listarMensajesRecibidos(request, response);
		}else if ( accion.equals("listarMensajesEnviados")){
			listarMensajesEnviados(request,response);
		}else if ( accion.equals("listarRecomendaciones")){
			listarRecomendaciones(request,response);
		}else if ( accion.equals("verMensaje") ){
			verMensaje(request,response);
		}else if ( accion.equals("crearMensaje") ){
			crearMensaje(request,response);
		}else if ( accion.equals("borrarMensaje")){
			borrarMensaje(request,response);
		}else if ( accion.equals("previsualizarRecomendacionPerfil") ){
			previsualizarRecomendacionPerfil(request,response);
		}else if ( accion.equals("recomendarPerfil") ){
			recomendarPerfil(request,response);
		}else if ( accion.equals("crearMensajeDesdePerfil")){
			crearMensajeDesdePerfil(request,response);
		}
	}

	private void crearMensajeDesdePerfil(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String idPerfil = request.getParameter("idPerfil");
		UsuarioBO usBO = new UsuarioBO();
		Usuario usuarioAEscribir = usBO.recuperarUsuarioByPerfil(idPerfil);
		request.setAttribute("usuarioAEscribir", usuarioAEscribir);
		request.getRequestDispatcher("crearMensajeDesdePerfil.jsp").include(request, response);
		
	}

	private void recomendarPerfil(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		
		HttpSession sesion = request.getSession();
		Usuario user = (Usuario)sesion.getAttribute("usuario");
		String idUsuarioARecomendar = request.getParameter("idUsuarioARecomendar");
		String nombrePErfil  = request.getParameter("nombrePerfil");
		String idPerfil = request.getParameter("idPerfil");
		
		MensajeBO mensajeBO = new MensajeBO();
		Mensaje m = new Mensaje();
		
		m.setDescripcion("Hola, te recomiendo que le eches una vista a este perfil: "+nombrePErfil);
		m.setFechaPublicacion(new Date());
		m.setIdUsuarioCreador(user.getIdUsuario());
		m.setIdUsuarioReceptor(idUsuarioARecomendar);
		m.setLeido("0");
		m.setRecomendaciones("1");
		
		mensajeBO.insertarMensaje(m);
		request.getRequestDispatcher("usuario?accion=verPerfilExterno&idPerfil="+idPerfil).include(request, response);
	}

	private void previsualizarRecomendacionPerfil(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String idPerfil = request.getParameter("idPerfil");
		UsuarioBO usBO = new UsuarioBO();
		List<Usuario> listaUsuario = usBO.recuperarTODOS();
		PerfilBO perfilBO = new PerfilBO();
		Map<String,String> mapaNombres = new HashMap<String,String>();
		for ( Usuario u : listaUsuario){
			String nombre = perfilBO.recuperarNombrePerfil(u.getIdPerfil());
			mapaNombres.put(u.getIdUsuario(), nombre);
		}
		request.setAttribute("mapaNombres", mapaNombres);
		request.setAttribute("perfilARecomendar", idPerfil);
		request.getRequestDispatcher("visualizacionRecomendacion.jsp").include(request,response);
		
	}

	private void borrarMensaje(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String idMensaje = request.getParameter("idMensaje");
		MensajeBO mensajeBO = new MensajeBO();
		mensajeBO.borrarMensaje(idMensaje);
		listarMensajesRecibidos(request, response);
	}

	private void crearMensaje(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String idCreador = request.getParameter("idCreador");
		String idReceptor = request.getParameter("idReceptor");
		String descripcion = request.getParameter("descripcion");
		String esRecomendado = request.getParameter("esRecomendado");
		
		MensajeBO mensajeBO = new MensajeBO();
		Mensaje m = new Mensaje();
		m.setDescripcion(descripcion);
		m.setFechaPublicacion(new Date());
		m.setIdUsuarioCreador(idCreador);
		m.setIdUsuarioReceptor(idReceptor);
		m.setLeido("0");
		m.setRecomendaciones(esRecomendado);
		
		mensajeBO.insertarMensaje(m);
		listarMensajesRecibidos(request,response);
	}

	private void verMensaje(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		String idMensaje = request.getParameter("idMensaje");
		String enviado = request.getParameter("enviados");
		MensajeBO mensajeBO = new MensajeBO();
		
		Mensaje mensaje = mensajeBO.recuperarMensajeById(idMensaje);
		mensajeBO.actualizaALeido(mensaje);
		request.setAttribute("mensaje", mensaje);
		if ( "1".equals(enviado) ){
			request.getRequestDispatcher("mensajeEnviado.jsp").include(request, response);
		}else{
			request.getRequestDispatcher("previsualizacionMensaje.jsp").include(request, response);
		}
	}

	private void listarRecomendaciones(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		HttpSession sesion = request.getSession();
		Usuario user = (Usuario) sesion.getAttribute("usuario");
		MensajeBO mensajeBO = new MensajeBO();
		List<Mensaje> mensajes = mensajeBO.recuperaMensajesFavoritos(user.getIdUsuario());
		request.setAttribute("listaMensajes", mensajes);
		request.getRequestDispatcher("mensajeFavoritos.jsp").include(request, response);
		
	}

	private void listarMensajesEnviados(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		HttpSession sesion = request.getSession();
		Usuario user = (Usuario) sesion.getAttribute("usuario");
		MensajeBO mensajeBO = new MensajeBO();
		List<Mensaje> mensajes = mensajeBO.recuperarMensajesEnviados(user.getIdUsuario());
		request.setAttribute("listaMensajes", mensajes);
		request.getRequestDispatcher("mensajesEnviados.jsp").include(request, response);
		
	}

	private void listarMensajesRecibidos(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		HttpSession sesion = request.getSession();
		Usuario user = (Usuario) sesion.getAttribute("usuario");
		MensajeBO mensajeBO = new MensajeBO();
		List<Mensaje> mensajes = mensajeBO.recuperaMensajesRecibidos(user.getIdUsuario());
		boolean mensajesNoLeidos = mensajeBO.mensajesSinLeer(user.getIdUsuario());
		request.setAttribute("mensajeNoLeidos", mensajesNoLeidos);
		request.setAttribute("listaMensajes", mensajes);
		request.getRequestDispatcher("mensajesRecibidos.jsp").include(request, response);
		
	}

}
